#include <bits/stdc++.h>

using namespace std;

const int maxn=300005;
int deg[maxn],mx[maxn][4];
int srtBy1[maxn];
struct pr{
    int sec,trd;
    const bool operator < (const pr &p) const { return trd<p.trd;}
    const bool operator < (const int &i) const { return trd<i;}
};
pr srtBy3[maxn];
int bit[maxn];

inline bool cmpInv(const int &x,const int &y){ return x>y;}

inline int lowbit(const int &x){ return x&(-x);}
inline void incbit(int p){
    p++; //p=0
    for(;p<maxn;p+=lowbit(p)) bit[p]++;
}
inline int sumbit(int p){
    p++;
    int ans=0;
    for(;p>0;p-=lowbit(p)) ans+=bit[p];
    return ans;
}

int sum[maxn*20],ls[maxn*20],rs[maxn*20];
int sum_deg[maxn*20];
int rt[maxn],cseg;

int dest;
void inc(int *cur,int old,int l,int r){
    while(l<r){
        *cur=++cseg;
        int mid=(l+r)>>1;
        ls[*cur]=ls[old];
        rs[*cur]=rs[old];
        sum[*cur]=sum[old]+1;
        //sum_deg[*cur]=sum_deg[old]+addDeg;
        if(dest<=mid){
            r=mid;
            old=ls[old];
            cur=&ls[*cur];
        }else{
            l=mid+1;
            old=rs[old];
            cur=&rs[*cur];
        }
    }
    *cur=++cseg;
    sum[*cur]=sum[old]+1;
    //sum_deg[*cur]=sum_deg[old]+addDeg;
}
int query(int ed,int bg,int l,int r){
    if(l>dest) {/*queDeg+=sum_deg[ed]-sum_deg[bg];*/return sum[ed]-sum[bg];}
    int mid=(l+r)>>1;
    if(dest<mid) return query(ls[ed],ls[bg],l,mid)+query(rs[ed],rs[bg],mid+1,r);
    else return query(rs[ed],rs[bg],mid+1,r);
}

int main(){
    int n,m,q,x,y,z;

    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&x,&y,&z);
        deg[x]++;deg[y]++;
        mx[x][3]=mx[y][3]=z;
        sort(mx[x],mx[x]+4,cmpInv);
        sort(mx[y],mx[y]+4,cmpInv);
        incbit(z);
    }
    for(int i=1;i<=n;i++){
        srtBy1[i]=mx[i][0];
        srtBy3[i].sec=mx[i][1];
        srtBy3[i].trd=mx[i][2];
    }
    sort(srtBy1+1,srtBy1+n+1);
    sort(srtBy3+1,srtBy3+n+1);
    for(int i=1;i<=n;i++){
        dest=srtBy3[i].sec;
        //addDeg=deg[srtBy3[i]];
        if(dest) inc(&rt[i],rt[i-1],1,maxn-1);
    }

    scanf("%d",&q);
    for(int i=1;i<=q;i++){
        int bound,p;
        int ansp,anse,t;
        scanf("%d",&bound);
        //queDeg=0;
        anse=sumbit(bound-1);
        ansp=lower_bound(srtBy1+1,srtBy1+n+1,bound)-srtBy1-1;

        dest=bound;
        p=lower_bound(srtBy3+1,srtBy3+n+1,bound)-srtBy3;
        t=query(rt[p-1],rt[0],1,maxn-1);
        anse+=t;ansp+=t;
        printf("%d %d\n",n-ansp,m-anse);
    }

    return 0;
}



